perm filename SYSCON.LSP[MAC,LSP]1 blob sn#613674 filedate 1981-09-21 generic text, type T, neo UTF8
;;; ()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;;; ()							  ()
;;;;()		  NIL Compiler for the S-1		  ()
;;; ()							  ()
;;; ()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;;; ()							  ()
;;; ()   This file contains code for the S-1 NIL system.  ()
;;; ()							  ()
;;; ()        "We don't call it `NIL' for nothing!"       ()
;;; ()							  ()
;;; ()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;;; ()							  ()
;;; ()  (c) Copyright 1981 Lawrence Livermore Laboratory  ()
;;; ()  This is a read-only file! (All writes reversed.)  ()
;;; ()							  ()
;;; ()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;;;
;;;STEELE 08/14/81 14:59  Added header, created history list.
;;;STEELE 08/14/81 14:59  Moved *:FRAME-RETURN-PC to be between
;;; *:FRAME-OLD-FP and *:FRAME-ARGUMENTS.
;;;STEELE 08/14/81 16:19  Put it back where it was -- I was wedged.
;;; Instead, move registers T1 and T2 to be after SQ and before TP.
;;; This improves the procedure call interface.
;;;STEELE 08/14/81 16:35  Put registers T1 and T2 back.  In other
;;; words,we are back where we started at the beginning of this history.
;;; Sorry about that.
;;;BROOKS 08/19/81 14:46  Moved all the special pieces of code in
;;; the systemic quantities vector to have indices of 32. onwards.
;;; Since they are always referenced with an indirect jump there is
;;; no advantage to short offsets.
;;;STEELE 08/21/81 12:55  Added three addresses to SQ vector for routines
;;; to handle RETURN-VECTOR and RETURN-LIST.
;;;BROOKS 08/21/81 15:46  Changed all the procedure and stack values to reflect
;;; the fact that procedure pointers point to the 39th word of the object.
;;;BROOKS 08/24/81 01:20  Added in constants for rounding modes for division.
;;;*History*

;;; Eventually use DEFCONST.

(DEFMACRO CONSTANT (NAME VALUE &OPTIONAL DOCUMENTATION)
  `(PROGN 'COMPILE
	  (DECLARE (SPECIAL ,NAME))
	  (COND ((BOUNDP ',NAME)
		 (OR (EQUAL ,NAME ,VALUE)
		     (FORMAT MSGFILES
			     '"~%;Inconsistent values (old ~S, new ~S) for ~S."
			     ,NAME
			     ',VALUE
			     ',NAME))))
	  (SETQ ,NAME ,VALUE)
	  ,@(AND DOCUMENTATION
		 `((DEFPROP ,NAME ,DOCUMENTATION DOCUMENTATION)))
	  (DEFPROP ,NAME T CONSTANT)))


;;;; Data types in type field of an S-1 pointer.

(CONSTANT *:DTP-POS-FIXNUM 0.)
(CONSTANT *:DTP-GATE-POINTER 1.)
(CONSTANT *:DTP-UNDEFINED 2.)
(CONSTANT *:DTP-S-1-SELF-RELATIVE 3.)
(CONSTANT *:DTP-S-1-RING-0 4.)
(CONSTANT *:DTP-S-1-RING-1 5.)
(CONSTANT *:DTP-S-1-RING-2 6.)
(CONSTANT *:DTP-S-1-RING-3 7.)
(CONSTANT *:DTP-GC 8.)

(CONSTANT *:DTP-NAMED-VECTOR 10.)
(CONSTANT *:DTP-NAMED-ARRAY 11.)
(CONSTANT *:DTP-HALF-FLONUM 12.)
(CONSTANT *:DTP-SINGLE-FLONUM 13.)
(CONSTANT *:DTP-DOUBLE-FLONUM 14.)
(CONSTANT *:DTP-TETRA-FLONUM 15.)
(CONSTANT *:DTP-HALF-COMPLEXNUM 16.)
(CONSTANT *:DTP-SINGLE-COMPLEXNUM 17.)
(CONSTANT *:DTP-DOUBLE-COMPLEXNUM 18.)
(CONSTANT *:DTP-TETRA-COMPLEXNUM 19.)
(CONSTANT *:DTP-EXTENDED-NUMBER 20.)
(CONSTANT *:DTP-CODE 21.)
(CONSTANT *:DTP-PROCEDURE 22.)
(CONSTANT *:DTP-ARRAY 23.)
(CONSTANT *:DTP-VECTOR 24.)
(CONSTANT *:DTP-SPECIAL-VECTOR 25.)
(CONSTANT *:DTP-STRING 26.)
(CONSTANT *:DTP-CHARACTER 27.)
(CONSTANT *:DTP-SYMBOL 28.)
(CONSTANT *:DTP-PAIR 29.)
(CONSTANT *:DTP-NULL 30.)
(CONSTANT *:DTP-NEG-FIXNUM 31.)
(CONSTANT *:NUMBER-OF-DATA-TYPES 32.)

(CONSTANT *:SYMBOL-VALUE-CELL 0.)
(CONSTANT *:SYMBOL-PROPERTY-LIST 1.)
(CONSTANT *:SYMBOL-FUNCTION-CELL 2.)
(CONSTANT *:SYMBOL-PRINT-NAME 3.)
(CONSTANT *:SYMBOL-PACKAGE 4.)
(CONSTANT *:SYMBOL-BIND-COUNT 5.)
(CONSTANT *:SYMBOL-SIZE 6.)

(CONSTANT *:EXTENDED-NUMBER-SUBTYPE -2)
    (CONSTANT *:EXTENDED-NUMBER-IMPOSSIBLE -1)
    (CONSTANT *:EXTENDED-NUMBER-BIGNUM 0)
    (CONSTANT *:EXTENDED-NUMBER-BIGFLOAT 1)
    (CONSTANT *:EXTENDED-NUMBER-BIGCOMPLEX 2)
    (CONSTANT *:EXTENDED-NUMBER-RATIONAL 3)

(CONSTANT *:VECTOR-SUBTYPE -2.)
    (CONSTANT *:VECTOR-SUBTYPE-BITS 511.)
    (CONSTANT *:VECTOR-BYTE-LENGTH (* (EXPT 2. 18.) 511.))
    (CONSTANT *:VECTOR-BYTE-SHIFT -18.)
        (CONSTANT *:VECTOR-TYPE-BITS 2.)
        (CONSTANT *:VECTOR-TYPE-QW-FIXNUM 3.)
        (CONSTANT *:VECTOR-TYPE-HW-FIXNUM 5.)
        (CONSTANT *:VECTOR-TYPE-SW-FIXNUM 6.)
        (CONSTANT *:VECTOR-TYPE-DW-FIXNUM 7.)
        (CONSTANT *:VECTOR-TYPE-SIGNED-BYTE-FIXNUM 9.)
        (CONSTANT *:VECTOR-TYPE-UNSIGNED-BYTE-FIXNUM 10.)
        (CONSTANT *:VECTOR-TYPE-HALF-FLONUM 11.)
        (CONSTANT *:VECTOR-TYPE-SINGLE-FLONUM 13.)
        (CONSTANT *:VECTOR-TYPE-DOUBLE-FLONUM 14.)
        (CONSTANT *:VECTOR-TYPE-TETRA-FLONUM 15.)
        (CONSTANT *:VECTOR-TYPE-HALF-COMPLEXNUM 17.)
        (CONSTANT *:VECTOR-TYPE-SINGLE-COMPLEXNUM 18.)
        (CONSTANT *:VECTOR-TYPE-DOUBLE-COMPLEXNUM 19.)
        (CONSTANT *:VECTOR-TYPE-TETRA-COMPLEXNUM 21.)
        (CONSTANT *:VECTOR-TYPE-HALF-COMPLEXINT 22.)
        (CONSTANT *:VECTOR-TYPE-SINGLE-COMPLEXINT 23.)
(CONSTANT *:VECTOR-TYPE-BYTE-SIZE-TABLE
	  '(() () () 1. ()           ;0-4
	       2. 4. 8. ()           ;5-8
	       () () 2. ()           ;9-12
	       4. 8. 16. ()          ;13-16
	       4. 8. 16. ()          ;17-20
	       32. 4. 8.))           ;21-23

(CONSTANT *:ARRAY-SUBTYPE -2.)
(CONSTANT *:ARRAY-AREF-CODE 0.)
(CONSTANT *:ARRAY-ASET-CODE 1.)
(CONSTANT *:ARRAY-DATA 2.)
        (CONSTANT *:ARRAY-TYPE-POINTER 0.)
        (CONSTANT *:ARRAY-TYPE-STRING 1.)
        (CONSTANT *:ARRAY-TYPE-BITS 2.)
        (CONSTANT *:ARRAY-TYPE-QW-FIXNUM 3.)
        (CONSTANT *:ARRAY-TYPE-HW-FIXNUM 5.)
        (CONSTANT *:ARRAY-TYPE-SW-FIXNUM 6.)
        (CONSTANT *:ARRAY-TYPE-DW-FIXNUM 7.)
        (CONSTANT *:ARRAY-TYPE-SIGNED-BYTE-FIXNUM 9.)
        (CONSTANT *:ARRAY-TYPE-UNSIGNED-BYTE-FIXNUM 10.)
        (CONSTANT *:ARRAY-TYPE-HALF-FLONUM 11.)
        (CONSTANT *:ARRAY-TYPE-SINGLE-FLONUM 13.)
        (CONSTANT *:ARRAY-TYPE-DOUBLE-FLONUM 14.)
        (CONSTANT *:ARRAY-TYPE-TETRA-FLONUM 15.)
        (CONSTANT *:ARRAY-TYPE-HALF-COMPLEXNUM 17.)
        (CONSTANT *:ARRAY-TYPE-SINGLE-COMPLEXNUM 18.)
        (CONSTANT *:ARRAY-TYPE-DOUBLE-COMPLEXNUM 19.)
        (CONSTANT *:ARRAY-TYPE-TETRA-COMPLEXNUM 21.)
        (CONSTANT *:ARRAY-TYPE-HALF-COMPLEXINT 22.)
        (CONSTANT *:ARRAY-TYPE-SINGLE-COMPLEXINT 23.)
(CONSTANT *:ARRAY-LEADER 3.)
(CONSTANT *:ARRAY-RANK 4.)
(CONSTANT *:ARRAY-DATA-OFFSET 5.)
(CONSTANT *:ARRAY-BYTE-OFFSET 6.)
(CONSTANT *:ARRAY-FILL-POINTER 7.)
(CONSTANT *:ARRAY-LENGTH 8.)
(CONSTANT *:ARRAY-DIMENSIONS 9.)
	(CONSTANT *:ARRAY-DIMENSION-LOWER-BOUND 0.)
	(CONSTANT *:ARRAY-DIMENSION-UPPER-BOUND 1.)
	(CONSTANT *:ARRAY-DIMENSION-WEIGHT 2.)
	(CONSTANT *:ARRAY-WORDS-PER-DIMENSION 3.)

(CONSTANT *:PROCEDURE-SUBTYPE -41.)
	(CONSTANT *:PROCEDURE-FUNCTION 0.)
	(CONSTANT *:PROCEDURE-MACRO 1.)
	(CONSTANT *:PROCEDURE-FEXPR 2.)
	(CONSTANT *:PROCEDURE-STACK-GROUP 3.)
(CONSTANT *:PROCEDURE-CODE -39.)
(CONSTANT *:PROCEDURE-OLD-CODE -38.)
(CONSTANT *:PROCEDURE-NAME -37.)
(CONSTANT *:PROCEDURE-POINTER-TEMPS -36.)
(CONSTANT *:PROCEDURE-NON-POINTER-TEMPS -35.)
(CONSTANT *:PROCEDURE-FLAGS -34.)
        (CONSTANT *:PROCEDURE-WRITABLE-ITEMS-FLAG 1.)
(CONSTANT *:PROCEDURE-DEBUGGING-PLIST -33.)
(CONSTANT *:PROCEDURE-TIMING-VECTOR -32.)
(CONSTANT *:PROCEDURE-MARKABLE-ITEMS -31.)

(CONSTANT *:CATCH-FRAME-LINK 0.)
(CONSTANT *:CATCH-FRAME-TP 1.)
(CONSTANT *:CATCH-FRAME-CP 2.)
(CONSTANT *:CATCH-FRAME-FP 3.)
(CONSTANT *:CATCH-FRAME-SP 4.)
(CONSTANT *:CATCH-FRAME-TAG 5.)
(CONSTANT *:CATCH-FRAME-FUNCTION 6.)
(CONSTANT *:CATCH-FRAME-CALL-SIGNATURE 7.)
(CONSTANT *:CATCH-FRAME-RETURN-PC 8.)
(CONSTANT *:CATCH-FRAME-SIZE 9.)

(CONSTANT *:STACK-GROUP-DYNAMIC-FRAME -31.)
(CONSTANT *:STACK-GROUP-CATCH-FRAME -30.)
(CONSTANT *:STACK-GROUP-STATE -29.)
	(CONSTANT *:STACK-GROUP-EXHAUSTED-STATE 0.)
	(CONSTANT *:STACK-GROUP-ACTIVE-STATE 1.)
	(CONSTANT *:STACK-GROUP-AWAITING-RETURN-STATE 2.)
	(CONSTANT *:STACK-GROUP-AWAITING-CALL-STATE 3.)
	(CONSTANT *:STACK-GROUP-AWAITING-ERROR-STATE 4.)
	(CONSTANT *:STACK-GROUP-AWAITING-START-STATE 5.)
(CONSTANT *:STACK-GROUP-TO-RESUME -28.)
(CONSTANT *:STACK-GROUP-PROGRAM-STATUS -27.)
(CONSTANT *:STACK-GROUP-SEGMENT -26.)
(CONSTANT *:STACK-GROUP-SEGMENT-END -25.)
(CONSTANT *:STACK-GROUP-SAVED-REGISTERS -24.)
(CONSTANT *:STACK-GROUP-SIZE 47.)

(CONSTANT *:FRAME-RETURN-VALUE (* -32. 4))
(CONSTANT *:FRAME-SPARE-PC-SLOT (* -31. 4))
(CONSTANT *:FRAME-OLD-TP (* -30. 4))
(CONSTANT *:FRAME-OLD-CP (* -29. 4))
(CONSTANT *:FRAME-OLD-FP (* -28. 4))
(CONSTANT *:FRAME-RETURN-PC (* -27. 4))
(CONSTANT *:FRAME-ARGUMENTS (* -26. 4))

(CONSTANT *:CALL-SIGNATURE-NUMERIC-VALUED 32.)
(CONSTANT *:CALL-SIGNATURE-MULTIPLE-VALUE 16.)

(CONSTANT *:REGISTER-FIRST-MARKED 16.)
(CONSTANT *:REGISTER-NUMBER-MARKED 10.)

(CONSTANT *:REGISTER-R0 0.) (CONSTANT *:REGISTER-SR0 0.)
(CONSTANT *:REGISTER-R1 1.) (CONSTANT *:REGISTER-SR1 1.)
(CONSTANT *:REGISTER-R2 2.) (CONSTANT *:REGISTER-SR2 2.)
(CONSTANT *:REGISTER-R3 3.) (CONSTANT *:REGISTER-PC 3.)
                            (CONSTANT *:REGISTER-SIZEREG 3.)
(CONSTANT *:REGISTER-RTA 4.)
(CONSTANT *:REGISTER-RTA1 5.)
(CONSTANT *:REGISTER-RTB 6.)
(CONSTANT *:REGISTER-RTB1 7.)
(CONSTANT *:REGISTER-I 8.)
(CONSTANT *:REGISTER-J 9.)
(CONSTANT *:REGISTER-K 10.)
(CONSTANT *:REGISTER-L 11.)
(CONSTANT *:REGISTER-M 12.)
(CONSTANT *:REGISTER-N 13.)
(CONSTANT *:REGISTER-Q 14.)
(CONSTANT *:REGISTER-R 15.)
(CONSTANT *:REGISTER-A 16.)
(CONSTANT *:REGISTER-B 17.)
(CONSTANT *:REGISTER-C 18.)
(CONSTANT *:REGISTER-V 19.)
(CONSTANT *:REGISTER-W 20.)
(CONSTANT *:REGISTER-X 21.)
(CONSTANT *:REGISTER-Y 22.)
(CONSTANT *:REGISTER-Z 23.)
(CONSTANT *:REGISTER-T1 24.)
(CONSTANT *:REGISTER-T2 25.)
(CONSTANT *:REGISTER-SG 26.)
(CONSTANT *:REGISTER-SQ 27.)
(CONSTANT *:REGISTER-TP 28.)
(CONSTANT *:REGISTER-CP 29.)
(CONSTANT *:REGISTER-FP 30.)
(CONSTANT *:REGISTER-SP 31.)
(CONSTANT *:REGISTER-QUANTITY 32.)

(CONSTANT *:REGISTER-TABLE
	  '((R0 . *:REGISTER-R0)
	    (SR0 . *:REGISTER-SR0)
	    (R1 . *:REGISTER-R1) 
	    (SR1 . *:REGISTER-SR1)
	    (R2 . *:REGISTER-R2) 
	    (SR2 .  *:REGISTER-SR2)
	    (R3 . *:REGISTER-R3) 
	    (PC . *:REGISTER-PC)
	    (SIZEREG . *:REGISTER-SIZEREG)
	    (RTA . *:REGISTER-RTA)
	    (RTA1 . *:REGISTER-RTA1)
	    (RTB . *:REGISTER-RTB)
	    (RTB1 . *:REGISTER-RTB1)
	    (I . *:REGISTER-I)
	    (J . *:REGISTER-J)
	    (K . *:REGISTER-K)
	    (L . *:REGISTER-L)
	    (M . *:REGISTER-M)
	    (N . *:REGISTER-N)
	    (Q . *:REGISTER-Q)
	    (R . *:REGISTER-R)
	    (A . *:REGISTER-A)
	    (B . *:REGISTER-B)
	    (C . *:REGISTER-C)
	    (V . *:REGISTER-V)
	    (W . *:REGISTER-W)
	    (X . *:REGISTER-X)
	    (Y . *:REGISTER-Y)
	    (Z . *:REGISTER-Z)
	    (T1 . *:REGISTER-T1)
	    (T2 . *:REGISTER-T2)
	    (SG . *:REGISTER-SG)
	    (SQ . *:REGISTER-SQ)
	    (TP . *:REGISTER-TP)
	    (CP . *:REGISTER-CP)
	    (FP . *:REGISTER-FP)
	    (SP . *:REGISTER-SP)))

(CONSTANT *:SQ-T (* -32. 4))
(CONSTANT *:SQ-NIL (* -31. 4))               ;must follow *:SQ-T
(CONSTANT *:SQ-NIL-2 (* -30. 4))             ;must follow *:SQ-NIL
(CONSTANT *:SQ-MIN-FIXNUM (* -29. 4))
(CONSTANT *:SQ-MAX-FIXNUM (* -28. 4))        ;must follow *:SQ-MIN-FIXNUM
(CONSTANT *:SQ-UNDEFINED (* -27. 4))
(CONSTANT *:SQ-UNDEFINED-2 (* -26. 4))       ;must be last one
(CONSTANT *:SQ-ALLOCATE-LOCK (* -25. 4))
(CONSTANT *:SQ-GC-LOCK (* -24. 4))
(CONSTANT *:SQ-IO-TRANSFERS (* -23. 4))
(CONSTANT *:SQ-BOTTOM-TABLE (* -22. 4))
(CONSTANT *:SQ-TOP-TABLE (* -21. 4))
(CONSTANT *:SQ-SYMBOL-FUNCTION-CELL (* -20. 4))

(CONSTANT *:SQ-WRONG-TYPE-OF-FUNCTION (* 32. 4))       ;these two must be
(CONSTANT *:SQ-WRONG-NUMBER-OF-ARGUMENTS (* 33. 4))    ;in this order
(CONSTANT *:SQ-SPECIAL-LOOKUP (* 34. 4))
(CONSTANT *:SQ-CONS (* 35. 4))                         ;these ten must be
(CONSTANT *:SQ-LIST (* 36. 4))                         ;in this order
(CONSTANT *:SQ-LIST* (* 37. 4))
(CONSTANT *:SQ-SINGLE-FLONUM-CONS (* 38. 4))
(CONSTANT *:SQ-DOUBLE-FLONUM-CONS (* 39. 4))
(CONSTANT *:SQ-TETRA-FLONUM-CONS (* 40. 4))
(CONSTANT *:SQ-HALF-COMPLEXNUM-CONS (* 41. 4))
(CONSTANT *:SQ-SINGLE-COMPLEXNUM-CONS (* 42. 4))
(CONSTANT *:SQ-DOUBLE-COMPLEXNUM-CONS (* 43. 4))
(CONSTANT *:SQ-TETRA-COMPLEXNUM-CONS (* 44. 4))
(CONSTANT *:SQ-ALLOCATE-IMPURE (* 45. 4))
(CONSTANT *:SQ-RETURN-VECTOR-EASY-CASE (* 46. 4))
(CONSTANT *:SQ-RETURN-VECTOR-HARD-CASE (* 47. 4))
(CONSTANT *:SQ-RETURN-LIST (* 48. 4))
(CONSTANT *:SQ-GET-MORE-STORAGE (* 49. 4))

(CONSTANT *:SQ-VECTOR-LENGTH 92.)
(CONSTANT *:SQ-VECTOR-MIDPOINT 32.)

(CONSTANT *:MAX-FIXNUM (SUB1 (EXPT 2. 31.)))
(CONSTANT *:MIN-FIXNUM (MINUS (EXPT 2. 31.)))
(CONSTANT *:MAX-SMALLNUM (SUB1 (EXPT 2. 18.)))
(CONSTANT *:MIN-SMALLNUM (MINUS (EXPT 2. 18.)))

(COMMENT
	|Do not try to use these yet -- they cannot possibly work in MacLISP|

(CONSTANT *:MAX-POS-HALF-FLONUM		)	;a half-flonum
(CONSTANT *:MIN-POS-HALF-FLONUM		)	;a half-flonum
(CONSTANT *:MIN-NEG-HALF-FLONUM		)	;a half-flonum
(CONSTANT *:MAX-NEG-HALF-FLONUM		)	;a half-flonum
(CONSTANT *:POS-HALF-FLONUM-OVERFLOW	)	;a half-flonum
(CONSTANT *:POS-HALF-FLONUM-UNDERFLOW	)	;a half-flonum
(CONSTANT *:NEG-HALF-FLONUM-UNDERFLOW	)	;a half-flonum
(CONSTANT *:NEG-HALF-FLONUM-OVERFLOW	)	;a half-flonum
(CONSTANT *:HALF-FLONUM-NOT-A-NUMBER	)	;a half-flonum

(CONSTANT *:MAX-POS-SMALL-FLONUM		)	;a small-flonum
(CONSTANT *:MIN-POS-SMALL-FLONUM		)	;a small-flonum
(CONSTANT *:MIN-NEG-SMALL-FLONUM		)	;a small-flonum
(CONSTANT *:MAX-NEG-SMALL-FLONUM		)	;a small-flonum
(CONSTANT *:POS-SMALL-FLONUM-OVERFLOW	)	;a small-flonum
(CONSTANT *:POS-SMALL-FLONUM-UNDERFLOW	)	;a small-flonum
(CONSTANT *:NEG-SMALL-FLONUM-UNDERFLOW	)	;a small-flonum
(CONSTANT *:NEG-SMALL-FLONUM-OVERFLOW	)	;a small-flonum
(CONSTANT *:SMALL-FLONUM-NOT-A-NUMBER	)	;a small-flonum

(CONSTANT *:MAX-POS-FLONUM		)	;a flonum
(CONSTANT *:MIN-POS-FLONUM		)	;a flonum
(CONSTANT *:MIN-NEG-FLONUM		)	;a flonum
(CONSTANT *:MAX-NEG-FLONUM		)	;a flonum
(CONSTANT *:POS-FLONUM-OVERFLOW		)	;a flonum
(CONSTANT *:POS-FLONUM-UNDERFLOW		)	;a flonum
(CONSTANT *:NEG-FLONUM-UNDERFLOW		)	;a flonum
(CONSTANT *:NEG-FLONUM-OVERFLOW		)	;a flonum
(CONSTANT *:FLONUM-NOT-A-NUMBER		)	;a flonum

(CONSTANT *:EOF-CHARACTER ???)

)	;end of comment out

(CONSTANT *:CHAR-CODE-LIMIT (EXPT 2. 9.))
(CONSTANT *:CHAR-FONT-LIMIT (EXPT 2. 9.))
(CONSTANT *:CHAR-BITS-LIMIT (EXPT 2. 4.))
(CONSTANT *:CHAR-CONTROL-BIT 1.)
(CONSTANT *:CHAR-META-BIT 2.)
(CONSTANT *:CHAR-HYPER-BIT 4.)
(CONSTANT *:CHAR-SUPER-BIT 8.)

(CONSTANT *:BITS-PER-Q 36.)
(CONSTANT *:BITS-PER-FIXNUM 32.)
(CONSTANT *:BITS-PER-CHARACTER 31.)
(CONSTANT *:BITS-PER-STRING-CHARACTER 9.)
(CONSTANT *:BITS-PER-BYTE 9.)

(CONSTANT *:BYTES-PER-Q 4.)
(CONSTANT *:BYTES-PER-QW-FIXNUM 1.)
(CONSTANT *:BYTES-PER-HW-FIXNUM 2.)
(CONSTANT *:BYTES-PER-SW-FIXNUM 4.)
(CONSTANT *:BYTES-PER-DW-FIXNUM 8.)
(CONSTANT *:BYTES-PER-HALF-FLONUM 2.)
(CONSTANT *:BYTES-PER-SINGLE-FLONUM 4.)
(CONSTANT *:BYTES-PER-DOUBLE-FLONUM 8.)
(CONSTANT *:BYTES-PER-TETRA-FLONUM 16.)
(CONSTANT *:BYTES-PER-HALF-COMPLEXNUM 4.)
(CONSTANT *:BYTES-PER-SINGLE-COMPLEXNUM 8.)
(CONSTANT *:BYTES-PER-DOUBLE-COMPLEXNUM 16.)
(CONSTANT *:BYTES-PER-TETRA-COMPLEXNUM 32.)
(CONSTANT *:BYTES-PER-HALF-COMPLEXINT 4.)
(CONSTANT *:BYTES-PER-SINGLE-COMPLEXINT 8.)

(CONSTANT *:WORDS-PER-SINGLE-FLONUM 1.)
(CONSTANT *:WORDS-PER-DOUBLE-FLONUM 2.)
(CONSTANT *:WORDS-PER-TETRA-FLONUM 4.)
(CONSTANT *:WORDS-PER-HALF-COMPLEXNUM 1.)
(CONSTANT *:WORDS-PER-SINGLE-COMPLEXNUM 2.)
(CONSTANT *:WORDS-PER-DOUBLE-COMPLEXNUM 4.)
(CONSTANT *:WORDS-PER-TETRA-COMPLEXNUM 8.)
(CONSTANT *:WORDS-PER-HALF-COMPLEXINT 1.)
(CONSTANT *:WORDS-PER-SINGLE-COMPLEXINT 2.)

(CONSTANT *:BITS-PER-HALF-FLONUM-MANTISSA 13.)	;counting hidden bit
(CONSTANT *:BITS-PER-HALF-FLONUM-EXPONENT 5.)
(CONSTANT *:BITS-PER-SMALL-FLONUM-MANTISSA 27.)
(CONSTANT *:BITS-PER-SMALL-FLONUM-EXPONENT 9.)
(CONSTANT *:BITS-PER-FLONUM-MANTISSA 57.)
(CONSTANT *:BITS-PER-FLONUM-EXPONENT 15.)
(CONSTANT *:MACHINE-INPUT-BASE 8.)

(CONSTANT *:PNAME-BUFFER-LENGTH 200.)
(CONSTANT *:OBARRAY-LENGTH 500.)

;;; here are the real quantities. for the simulator we use fake quantities.
;(CONSTANT *:SEGMENTITO-SIZE 65536.)			; qtr words
;(CONSTANT *:LOG-SEGMENTITO-SIZE 16.)
;(CONSTANT *:MINUS-LOG-SEGMENTITO-SIZE -16.)
;(CONSTANT *:SEGMENTITOS-PER-ADDRESS-SPACE 32768.)
;(CONSTANT *:LOG-SEGMENTITOS-PER-ADDRESS-SPACE 15.)

(CONSTANT *:SEGMENTITO-SIZE 32768.)			; qtr words
(CONSTANT *:LOG-SEGMENTITO-SIZE 15.)
(CONSTANT *:MINUS-LOG-SEGMENTITO-SIZE -15.)
(CONSTANT *:SEGMENTITOS-PER-ADDRESS-SPACE 1024.)
(CONSTANT *:LOG-SEGMENTITOS-PER-ADDRESS-SPACE 10.)

;;; storage allocation constants

(CONSTANT *:SID-UNALLOCATED 0.)
(CONSTANT *:SID-PURE-INSTRUCTION 1.)
(CONSTANT *:SID-IMPURE-INSTRUCTION 2.)
(CONSTANT *:SID-NEW-INSTRUCTION 3.)
(CONSTANT *:SID-PURE-DATA 9.)
(CONSTANT *:SID-IMPURE-DATA 10.)
(CONSTANT *:SID-NEW-DATA 11.)
(CONSTANT *:SID-SEMIPURE 12.)
(CONSTANT *:SID-STACK 13.)
(CONSTANT *:SID-EXTERNAL 15.)

(CONSTANT *:SID-TABLE-SIZE 16.)

;;; data segments must have approx 32 free words at the end, in case a 
;;; a procedure header with an offset register is nearby

(CONSTANT *:EOS-DATA-OFFSET (* 4. -32.))
(CONSTANT *:EOS-INSTRUCTION-OFFSET 0.)

;;; used by the garbage collector

(CONSTANT *:GC-DEFAULT-LOG-SEGMENTITOS-PER-SEGMENT 0.)  ; may get bigger latter

(CONSTANT *:GC-SPACE-ID-BITS 15.)
(CONSTANT *:GC-LOG-SEGMENT-SIZE-BITS 240.)
(CONSTANT *:GC-LOG-SEGMENT-SIZE-LSH -4.)
(CONSTANT *:GC-NEXT-SEGMENT-IN-SPACE-PTR-BITS 8388352.)
(CONSTANT *:GC-NEXT-SEGMENT-IN-SPACE-PTR-LSH -9.)
(CONSTANT *:GC-MORE-SEGMENTS-IN-SPACE-BIT 8388608.)
(CONSTANT *:GC-PURIFIED-BIT 16777216.)
(CONSTANT *:GC-STACK-MARKED-BIT 33554432.)

;;; access mode constants and macros

(CONSTANT *:GC-ACCESS-INSTRUCTIONS-BIT 32.)
(CONSTANT *:GC-ACCESS-DATA-BIT 16.)
(CONSTANT *:GC-ACCESS-READ-ALLOCATE-BIT 8.)
(CONSTANT *:GC-ACCESS-WRITE-ALLOCATE-BIT 4.)
(CONSTANT *:GC-ACCESS-WRITE-ONLY-BIT 2.)
(CONSTANT *:GC-ACCESS-WRITE-THROUGH-BIT 1.)

(CONSTANT *:GC-ACCESS-INSTRUCTION 56.)
(CONSTANT *:GC-ACCESS-PURE-DATA 24.)
(CONSTANT *:GC-ACCESS-IMPURE-DATA 28.)
(CONSTANT *:GC-ACCESS-WRITING-INSTRUCTIONS 57.)

;;; constants for the "hokey" io system. these will change later.

(CONSTANT *:STREAM-HEADER 0.)
(CONSTANT *:STREAM-PATH-NAME 1.)
(CONSTANT *:STREAM-DIRECTION 2.)
(CONSTANT *:STREAM-TYPE 3.)
(CONSTANT *:STREAM-FILE-LENGTH 4.)
(CONSTANT *:STREAM-CHANNEL 5.)
(CONSTANT *:STREAM-OPEN 6.)
(CONSTANT *:STREAM-BUFFER-POINT 7.)
(CONSTANT *:STREAM-BUFFER 8.)
	(CONSTANT *:STREAM-HEADER-LENGTH 9.)

(CONSTANT *:STREAM-BUFFER-LENGTH 256.)

;;; constants for the "hokey" IOMEM interface - most are contained
;;; directly in the low level LAP file IOMEM.LAP

(CONSTANT *:IOM-OP-RD 1.)
(CONSTANT *:IOM-OP-WR 2.)

(CONSTANT *:CHANNEL-QUANTITY 16.)

;;; rounding modes

(CONSTANT *:ROUND-MODE-FL 0.)
(CONSTANT *:ROUND-MODE-DM 1.)
(CONSTANT *:ROUND-MODE-CL 4.)
(CONSTANT *:ROUND-MODE-ST 10.)